package com.msz.config;

import org.springframework.context.annotation.Bean;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

/**
 * Swagger 在线API文档配置类，版本2.9.2
 * 配置第一步：引入lib目录下的13个jar包：
 * springfox-core-2.9.2.jar
 * springfox-schema-2.9.2.jar
 * springfox-spring-web-2.9.2.jar
 * springfox-swagger2-2.9.2.jar
 * springfox-swagger-common-2.9.2.jar
 * springfox-swagger-ui-2.9.2.jar
 * springfox-spi-2.9.2.jar
 * guava-20.0.jar
 * spring-plugin-core-1.2.0.RELEASE.jar
 * spring-plugin-metadata-2.0.0.RELEASE.jar
 * classmate-1.15.1.jar
 * swagger-models-1.5.22.jar
 * swagger-annotations-1.5.22.jar
 * 配置第二步：SpringMVC配置文件配置
 * 	2.1 向容器自动注入配置
 * 	<context:annotation-config/>
 * 	2.2 开启注解
 * 	<mvc:annotation-driven/>
 * 	2.3 扫描配置类注解位置
 * 	<context:component-scan base-package="com.msz.config"/>
 * 	2.4 将SwaggerConfig配置类注入
 * 	<bean class="com.msz.config.SwaggerConfig"/>
 * 	<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />
 * 	2.5配置swagger-ui资源地址映射
 * 	<mvc:resources location="classpath:/META-INF/resources/" mapping="swagger-ui.html"/>
 * 	<mvc:resources location="classpath:/META-INF/resources/webjars/" mapping="/webjars/**"/>
 * 	2.6 拦截器配置
 *  <mvc:interceptors>
 * 		<mvc:interceptor>
 * 			<mvc:mapping path="/api/**"/>
 * 			<bean class="com.msz.interceptor.HandlerInterceptor1"></bean>
 * 		</mvc:interceptor>
 * 	</mvc:interceptors>
 * 	配置第三步(可选):添加注解标识信息
 *  @Api(tags = "用户管理")    添加在Controller类上，标识当前类信息
 *  @ApiOperation("查询用户")  添加在方法上，标识方法信息
 *  @ApiParam("用户id")       添加在方法参数上，标识参数信息
 * @author hx
 * @date 2021-09-09 20:41
 */
@EnableSwagger2
@EnableWebMvc
public class SwaggerConfig {
    /**
     * 配置swagger的Docket的bean实例
     * @return Docket的bean实例
     */
    @Bean
    public Docket docket(){
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .groupName("massz")
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.msz.controller"))
                .build();
    }

    /**
     * 配置swagger信息 apiInfo
     * @return apiInfo
     */
    private ApiInfo apiInfo(){
        return new ApiInfoBuilder()
                .title("JavaEE课程在线API文档")
                .description("本文档描述了RESTful API接口")
                .version("1.0")
                .contact(new Contact("massz", "http://mask-hx.com", "2500130018@qq.com"))
                .build();
    }

}
